﻿#define _CRT_SECURE_NO_WARNINGS 1
/*题目描述
鉴于很多同学Ctrl+A,Ctrl+C,Ctrl+V的问题，Eric想重新计算一下作业成绩，成绩计算的规则如下：

每道题按正确提交的先后顺序给分，第1-12名32，13-24名16分，25-48名8分，49-96名4分，97-192名2分，其余1分。
学生所有题目的分数累加和为其积分。
作业成绩=round(100+log(1+本人积分−最高积分最高积分)×10)，其中round为四舍五入取整，log以自然对数为底。
Eric已经通过查询数据库得到每个人每道题的排名情况，请写一个程序帮Eric算一下所有人的作业成绩。

输入
输入包含若干行，每行是三个部分，题目号，学号，排名。
学生人数不超过500，题目数量不超过200。

输出
输出学号和成绩，按成绩逆序，学号，并按作业成绩逆序，学号正序排列显示。*/

#include<stdio.h>
#include<string.h>
#include<math.h>

//数组a存学号数组b存排名 通过下标将a,b捆绑
__int64 a[501];
int b[501];

int trans(int x)
{
    if (x >= 1 && x <= 12)
        x = 32;
    else if (x >= 13 && x <= 24)
        x = 16;
    else if (x >= 25 && x <= 48)
        x = 8;
    else if (x >= 49 && x <= 96)
        x = 4;
    else if (x >= 97 && x <= 192)
        x = 2;
    else if (x >= 193)
        x = 1;
    return x;
}

int swapp(int x, int y)
{
    int temp;
    temp = a[x];
    a[x] = a[y];
    a[y] = temp;

    temp = b[x];
    b[x] = b[y];
    b[y] = temp;

    return 0;
}

int main()
{
    memset(a, 0, sizeof(a));
    memset(b, 0, sizeof(b));
    int n;
    int rank;
    int flag = 1;
    int i, j;
    while (scanf("%d %I64d %d", &n, &a[flag], &rank) != EOF)
    {
        for (i = 0; i < flag; i++)
        {
            if (a[i] == a[flag])
            {
                break;
            }
        }
        //将排名转换成积分
        b[i] += trans(rank);
        if (i == flag)
            flag++;
    }

    int num, judge = 1;
    num = flag - 1;
    while (judge)
    {
        //冒泡将积分排序
        judge = 0;
        for (i = 1; i < num; i++)
        {
            if (b[i] < b[i + 1])
            {
                swapp(i, i + 1);
                judge = 1;
            }
        }
    }
    int k;
    double q, w;
    q = b[1];
    //将积分转为分数
    for (i = 1; i <= num; i++)
    {
        w = log(b[i] / q) * 10 + 100.5;
        b[i] = w;
    }

    for (i = 1; i < num; i++)
    {
        //寻找积分相同的区间段
        k = i;
        while (b[i] == b[i + 1])
        {
            i++;
        }

        judge = 1;
        while (judge)
        {
            //冒泡将学号排序
            judge = 0;
            for (j = k; j < i; j++)
            {
                if (a[j] > a[j + 1])
                {
                    swapp(j, j + 1);
                    judge = 1;
                }
            }
        }
    }
    for (i = 1; i <= num; i++)
        printf("%I64d %d\n", a[i], b[i]);
    return 0;
}
